package com.zretc.device.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.zretc.dbtools.DBTools;
import com.zretc.device.entity.Device_Out;

public class Device_OutDao {
	/**
	 * 增加入库的方法
	 * 
	 * @return
	 */
	public boolean addDevOut(Device_Out devout) {
		String sql = "insert into device_out values (?,?,?,?,?,?,?,?)";
		int n = DBTools.getUpdate(sql, devout.getOut_id(), devout.getDevice_code(), devout.getDepartment(),
				devout.getOut_date(), devout.getOut_status(), devout.getOut_num(), devout.getOut_person(),
				devout.getTaker());
		if (n == 1) {
			// 更新现有库存表
			String updateSql = "UPDATE device set device.now_num =device.now_num-(select device_out.out_num from device_out where device_out.out_id=?) where device.device_code  = ?";
			DBTools.getUpdate(updateSql, devout.getOut_id(), devout.getDevice_code());
		}

		return n > 0;
	}

	/**
	 * 查询所有
	 * 
	 * @return
	 */
	public List<Device_Out> findDevOutAll() {
		// 创建集合
		List<Device_Out> list = new ArrayList<Device_Out>();
		String sql = "select * from device_out";
		ResultSet rs = DBTools.getQuery(sql, null);
		try {
			// 遍历
			while (rs.next()) {
				// 出库编号
				int out_id = rs.getInt(1);
				// 设备编号
				String device_code = rs.getString(2);
				// 使用部门
				String department = rs.getString(3);
				// 出库日期
				String out_date = rs.getString(4);
				// 出库设备状态
				String out_status = rs.getString(5);
				// 出库数量
				int out_num = rs.getInt(6);
				// 出库仓库管理员
				String out_person = rs.getString(7);
				// 领取人
				String taker = rs.getString(8);
				Device_Out dout = new Device_Out(out_id, device_code, department, out_date, out_status, out_num,
						out_person, taker);
				// 添加到集合
				list.add(dout);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放资源
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return list;
	}

	/**
	 * 根据设备编号模糊查询
	 * 
	 * @return
	 */
	public List<Device_Out> findDevOutByCode(String devCode) {
		// 创建集合
		List<Device_Out> list = new ArrayList<Device_Out>();
		String sql = "select * from device_out where device_code like ?";
		ResultSet rs = DBTools.getQuery(sql, "%" + devCode + "%");
		try {
			// 遍历
			while (rs.next()) {
				// 出库编号
				int out_id = rs.getInt(1);
				// 设备编号
				String device_code = rs.getString(2);
				// 使用部门
				String department = rs.getString(3);
				// 出库日期
				String out_date = rs.getString(4);
				// 出库设备状态
				String out_status = rs.getString(5);
				// 出库数量
				int out_num = rs.getInt(6);
				// 出库仓库管理员
				String out_person = rs.getString(7);
				// 领取人
				String taker = rs.getString(8);
				Device_Out dout = new Device_Out(out_id, device_code, department, out_date, out_status, out_num,
						out_person, taker);
				// 添加到集合
				list.add(dout);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放资源
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return list;
	}

	/**
	 * 根据出库模糊查询
	 * 
	 * @return
	 */
	public List<Device_Out> findDevOutByDate(String outDate) {
		// 创建集合
		List<Device_Out> list = new ArrayList<Device_Out>();
		String sql = "select * from device_out where out_date like ?";
		ResultSet rs = DBTools.getQuery(sql, "%" + outDate + "%");
		try {
			// 遍历
			while (rs.next()) {
				// 出库编号
				int out_id = rs.getInt(1);
				// 设备编号
				String device_code = rs.getString(2);
				// 使用部门
				String department = rs.getString(3);
				// 出库日期
				String out_date = rs.getString(4);
				// 出库设备状态
				String out_status = rs.getString(5);
				// 出库数量
				int out_num = rs.getInt(6);
				// 出库仓库管理员
				String out_person = rs.getString(7);
				// 领取人
				String taker = rs.getString(8);
				Device_Out dout = new Device_Out(out_id, device_code, department, out_date, out_status, out_num,
						out_person, taker);
				// 添加到集合
				list.add(dout);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放资源
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return list;
	}

	/**
	 * 修改出库的内容
	 * 
	 * @param doutId 出库单号
	 * @return 是否删除成功
	 */
	public boolean modDevOut(Device_Out device_Out) {
		// 找出原本的值
		Device_Out dout = findDevOutById(device_Out.getOut_id());
		String sql = "update device_out set device_code=?,department=?,out_date=?,"
				+ "out_status=?,out_num=?,out_person=?,taker=? where out_id=?";
		// 返回值1,0;
		int n = DBTools.getUpdate(sql, device_Out.getDevice_code(), device_Out.getDepartment(),
				device_Out.getOut_date(), device_Out.getOut_status(), device_Out.getOut_num(),
				device_Out.getOut_person(), device_Out.getTaker(), device_Out.getOut_id());
		if (n == 1) {
			// 更新现有库存表
			String updateSql = "UPDATE device set device.now_num =device.now_num+?-(select device_out.out_num from device_out where device_out.out_id=?) where device.device_code  = ?";
			DBTools.getUpdate(updateSql, dout.getOut_num(), device_Out.getOut_id(), device_Out.getDevice_code());
		}
		return n > 0;

	}

	/**
	 * 删除的方法
	 * 
	 * @param outId 参数是单号
	 * @return
	 */
	public boolean delDevOut(int outId) {
		// 找出原本的值
		Device_Out dout = findDevOutById(outId);
		String sql = "delete from device_out where out_id=?";
		int n = DBTools.getUpdate(sql, outId);
		if (n == 1) {
			// 更新现有库存表
			String updateSql = "UPDATE device set device.now_num =device.now_num+? where device.device_code  = ?";
			DBTools.getUpdate(updateSql, dout.getOut_num(),dout.getDevice_code());
		}
		return n > 0;
	}

	/**
	 * 根据单号查询
	 * 
	 * @return
	 */
	public Device_Out findDevOutById(int outId) {
		// 创建对象
		Device_Out dout = null;
		String sql = "select * from device_out where out_id=?";
		ResultSet rs = DBTools.getQuery(sql, outId);
		try {
			// 遍历
			if (rs.next()) {
				// 出库编号
				int out_id = rs.getInt(1);
				// 设备编号
				String device_code = rs.getString(2);
				// 使用部门
				String department = rs.getString(3);
				// 出库日期
				String out_date = rs.getString(4);
				// 出库设备状态
				String out_status = rs.getString(5);
				// 出库数量
				int out_num = rs.getInt(6);
				// 出库仓库管理员
				String out_person = rs.getString(7);
				// 领取人
				String taker = rs.getString(8);
				dout = new Device_Out(out_id, device_code, department, out_date, out_status, out_num, out_person,
						taker);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放资源
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return dout;
	}

}
